const {
    controller,
    get
} = require('../lib/decorator')

const router = require('koa-router')()
// const fs = require('fs')
const path = require('path')
const mongoose = require('mongoose')
const { pageQuery } = require('../common/index')
const qiniu = require('qiniu')
const nanoid = require('nanoid')
const config = require('../config')


const bucket = config.qiniu.bucket
const mac = new qiniu.auth.digest.Mac(config.qiniu.AK, config.qiniu.SK)
const cfg = new qiniu.conf.Config()
const client = new qiniu.rs.BucketManager(mac, cfg)

const uploadToQiniu = async (url, key) => {
    return new Promise((resolve, reject) => {
        client.fetch(url, bucket, key, (err, ret, info) => {
            if (err) {
                reject(err)
            } else {
                if (info.statusCode === 200) {
                    resolve({ key })
                } else {
                    reject(info)
                }
            }
        })
    })
}

const successResponse = (code, msg, data) => {
    return { code, msg, data }
}

// router.prefix('/api/movie')

@controller('/api/v0/movies')
export class movieController {
    @get('/')
    async getMovies(ctx, next) {
        const Movie = mongoose.model('Movie')
        const movies = await Movie.find({}).sort({
            'meta.createdAt': -1
        })

        ctx.body = {
            movies
        }
    }

    @get('/:id')
    async getMovieDetail(ctx, next) {
        const Movie = mongoose.model('Movie')
        const id = ctx.params.id
        const movie = await Movie.findOne({ _id: id })

        ctx.body = {
            movie
        }
    }
}
// router
//     // 获取视频列表
//     .get('/getMovieList', async ctx => {
//         const MovielModel = mongoose.model('Movie')
//         const pageNum = Number(ctx.query.pageNum) || 1
//         const pageSize = Number(ctx.query.pageSize) || 10
//         try {
//             var res = await pageQuery(pageNum, pageSize, MovielModel, '', {}, {
//                 created_time: 'desc'
//             })
//             ctx.body = successResponse(200, 'success', res)
//         } catch (error) {
//             ctx.body = successResponse(503, error, null)
//         }
//     })
//     // 新增视频
//     .post('/addMovieList', async ctx => {
//         const MovielModel = mongoose.model('Movie')
//         let params = JSON.parse(JSON.stringify(ctx.request.body))
//         params.movieTypes = params.movieTypes.split(',')
//         var movielModel = new MovielModel(params)
//         try {
//             await movielModel.save()
//             ctx.body = successResponse(200, '添加成功', null)
//         } catch (err) {
//             ctx.body = successResponse(503, '添加失败', null)
//         }
//     })
//     // 修改视频
//     .put('/updateMovieList', async ctx => {
//         const MovielModel = mongoose.model('Movie')
//         let params = JSON.parse(JSON.stringify(ctx.request.body))
//         try {
//             await MovielModel.updateOne({ _id: params._id }, params)
//             ctx.body = successResponse(200, '修改成功', null)
//         } catch (err) {
//             ctx.body = successResponse(503, '修改失败', null)
//         }
//     })
//     // 删除视频
//     .delete('/delMovieList', async ctx => {
//         const MovielModel = mongoose.model('Movie')
//         let ids = ctx.query.ids
//         ids = ids.split(',')
//         try {
//             for (let i = 0; i < ids.length; i++) {
//                 await MovielModel.remove({ _id: ids[i] })
//             }
//             ctx.body = successResponse(200, '删除成功', null)
//         } catch (err) {
//             ctx.body = successResponse(503, '删除失败', err)
//         }
//     })
//     // 视频上传
//     .put('/uploadMovieVideo', async ctx => {
//         // const file = ctx.request.files.file
//         // // 创建可读流
//         // const reader = fs.createReadStream(file.path)
//         // const filePath = path.join(__dirname, '../videos/' + `/${file.name}`)
//         // // 创建可写流
//         // const writer = fs.createWriteStream(filePath)
//         // // 可读流通过管道写入可写流
//         // const pro = new Promise((resolve, reject) => {
//         //     var stream = reader.pipe(writer)

//         //     stream.on('finish', function () {
//         //         resolve(`http://192.168.0.168:3000/videos/${file.name}`)
//         //     })
//         // })

//         // try {
//         //     let res = await pro
//         //     ctx.response.body = successResponse(200, '上传成功', res)
//         // } catch (err) {
//         //     ctx.body = successResponse(503, '删除失败', err)
//         // }

//         await uploadToQiniu(movie.video, nanoid() + '.mp4')

//     })

module.exports = router
